/**
 * $Id: TestMain.java,v 1.0 2022/6/5 22:13 shidesheng Exp $
 * <p>
 * Copyright 2021 Sinosoft Co.,Ltd. All rights reserved.
 */
package sds.mode.prototype.shallow;


import java.util.ArrayList;
import java.util.List;

/**
 * @author shidesheng
 * @version $Id: TestMain.java,v 1.1 2022/6/5 22:13 shidesheng Exp $
 * Created on 2022/6/5 22:13
 *
 * 原型模式 --> 浅克隆
 * 定义：
 * 原型模式是指原型实例指定创建对象的种类，并且通过拷贝这些原型创建新的对象。
 * 调用者不需要知道任何创建细节，不调用构造函数
 * 适用场景：
 * 1. 类初始化消耗资源较多
 * 2. new产生的一个对象需要非常繁琐的过程(数据准备，访问权限等)
 * 3. 构造函数比较复杂
 * 4. 循环体中生产大量对象时
 * 优点：
 *
 * 缺点；
 *
 */
public class TestMain {

	public static void main(String[] args) {
		// 原型对象
		ConcretePrototype concretePrototype = new ConcretePrototype();
		concretePrototype.setAge(18);
		concretePrototype.setName("xiaoming");
		List<String> list = new ArrayList<String>();
		list.add("读书");
		list.add("书法");
		concretePrototype.setHobbies(list);
		// 克隆对象 --> 本地克隆（Object的克隆方法）
		ConcretePrototype clone = concretePrototype.clone();
		clone.getHobbies().add("羽毛球");
		System.out.println(concretePrototype);
		System.out.println(clone);
	}
}
